Skip to content

Improve screen reader accessibility in web UI#3

Open
odium1963 wants to merge 1 commit intoFave42:masterfrom
odium1963:feat/accessibility
Open

Improve screen reader accessibility in web UI#3
odium1963 wants to merge 1 commit intoFave42:masterfrom
odium1963:feat/accessibility

Conversation

@odium1963
Copy link
Copy Markdown

Summary

  • Replace ui.aggrid with ui.table for the episode list
  • Replace the parallel-downloads slider with a number input
  • Hide Quasar's internal q-focus-helper spans from the accessibility tree
  • Restore a visible focus ring for sighted keyboard users via :focus-visible CSS

Why

Tested with NVDA on Windows. Three issues were found:

Episode table unreadable — AG Grid uses div-based custom ARIA that NVDA frequently fails to parse in browse mode. ui.table renders a native <table> element with proper <thead>/<tbody> semantics that NVDA reads correctly.

Slider inaccessible — Quasar's QSlider wasn't being announced correctly by NVDA in either browse or focus mode. A standard <input type="number"> works out of the box with all screen readers.

Unlabeled button announced before every interactive element — Quasar adds a <span class="q-focus-helper" tabindex="-1"> inside every button, checkbox, and slider for its focus ring effect. Because it has tabindex="-1", NVDA announces it as an unlabeled interactive element in browse mode. Setting display: none removes it from the accessibility tree entirely. A :focus-visible CSS rule on the parent elements restores the visual focus indicator for sighted keyboard users.

Test plan

  • Load the web UI with NVDA active
  • Browse mode: confirm no "unlabeled button" is announced before interactive elements
  • Load episodes and confirm NVDA can read the episode table with arrow keys
  • Confirm the parallel-downloads number input is readable and adjustable
  • Tab through the page and confirm a visible focus ring is shown on buttons

🤖 Generated with Claude Code

- Replace ui.aggrid with ui.table so NVDA can read episodes in browse
  mode using native HTML table semantics
- Replace the parallel-downloads slider with a number input, which
  screen readers handle natively without extra ARIA wiring
- Hide Quasar's internal q-focus-helper spans from the accessibility
  tree (they have tabindex="-1" and no label, causing NVDA to announce
  an unlabeled button before every interactive element)
- Restore a visible focus ring for sighted keyboard users via
  :focus-visible CSS so removing q-focus-helper doesn't regress
  keyboard navigation visually

Co-Authored-By: odium1963 <odium71499@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant